Sometimes, actions performed by one process may impact one or more other concurrently executing processes. For example, a first process may generate data and write the data into a buffer. A second process might concurrently read data from the buffer, removing data from the buffer as the data is read. As long as the second process reads and removes data from the buffer at least as rapidly as the first process writes data to the buffer, the buffer will not overflow. However, the second process might shut down. If the first process is not aware that the second process has shut down, then the first process might continue to write data to the buffer, eventually causing the buffer to overflow.
Because actions performed by one process may impact one or more other processes, it is beneficial for such processes to be able to communicate automatically with each other. If processes execute in connection with the same operating system, then the processes may invoke interprocess communication methods provided by the operating system in order to exchange messages with each other.
However, each process will often execute in connection with a different operating system. Even if each such operating system provides interprocess communication methods, an interprocess communication method provided by one operating system might not be compatible with an interprocess communication method provided by another operating system.
Under some approaches, in order for a first process to receive each message that is sent from a second process, the first process is configured to listen continuously for messages from the second process. When a first process is configured to continuously listen for messages from a second process, the first process can be said to be “tightly coupled” to the second process. Tight coupling between processes increases the processing overhead involved in interprocess communication.
Under some approaches, in order for a particular process to send a message to multiple other processes, the particular process sends the message to each of the other processes separately. Under such approaches, the particular process needs to know the identity of each message recipient. If there are many message recipients, then many messages will be sent. Too many messages can overwhelm limited communication resources.
Additionally, under current approaches, messages relating to an action performed by a process are generated only after the process has performed the action. In systems that use monitoring agents, a significant amount of time may pass before a monitoring agent detects that a process has performed an action. A significant amount of time may pass before the monitoring agent generates a corresponding message to alert other processes about the action. By the time the action has been performed, there may be little or no time remaining for such other processes to prepare for or respond to the action appropriately and effectively. At any given moment, computing resources may be allocated to the performance of one or more tasks. Without receiving sufficient advanced notice of some actions, processes might not have enough time to re-allocate enough resources to handle the action efficiently. When processes can only attempt to judge the impact of other processes' performed actions based on limited information gathered reactively by a monitoring agent, which may be able to determine only superficial information about the actions, the processes may be hindered by the need to evaluate the meaning of the actions. Sometimes, only the process that performed the actions possesses sufficient information concerning the full meaning and scope of the actions.
These are some of the problems that attend past approaches to interprocess communication. Because of these problems, past approaches to interprocess communication leave much to be desired. Because interprocess communication can significantly benefit systems in which the actions of one process impact one or more other processes, a technique for interprocess communication that overcomes these problems is needed.
The approaches described in this section are approaches that could be pursued, but not necessarily approaches that have been previously conceived or pursued. Therefore, unless otherwise indicated, it should not be assumed that any of the approaches described in this section qualify as prior art merely by virtue of their inclusion in this section.